'''
图像处理基础原理

图像的互相关操作类似于卷积
卷积：逆向，求积、求和
互相关：求积，求和
'''

import cv2
import numpy


'''
图像缩放
灰度图像的本质是矩阵
图像缩放的本质就是矩阵的缩放，术语:重采样(重新采样)
缩放有两个方向：放大、缩小

放大
小矩阵投射到大矩阵，无像素值的区域如何填充像素？术语:插值
插值算法有：

缩小
大矩阵投射到小矩阵，取哪些元素去投射？术语:抽样(采样)
采样算法有：
'''
def lxz_img_scale():
    origin = cv2.imread("images/lena.png", cv2.IMREAD_GRAYSCALE)
    cv2.imshow("origin", origin)
    cv2.waitKey()
    
    origin_h, origin_w = origin.shape
    print(f"origin_h={origin_h},origin_w={origin_w}")
    
    target_h = int(origin_h / 2)
    target_w = int(origin_w / 2)
    
    target = numpy.zeros((target_h, target_w), dtype=numpy.uint8)
    
    # 计算宽高两个方向的放大比例
    h_scale = target_h / origin_h
    w_scale = target_w / origin_w
    
    r = 0
    while r < target_h:
        
        c = 0
        while c < target_w:
            map_r = int(r / h_scale)
            map_c = int(c / w_scale)
            target[r, c] = origin[map_r, map_c]
            
            c = c + 1

        r = r + 1
    
    print("caculate target ok")
    cv2.imshow("target", target)
    cv2.waitKey()
    
if __name__ == "__main__":
    lxz_img_scale()
    
    exit(0)